prktalkfandomcom_ru-20200215-history
CRON
Планировщик заданий Cron Cron — программа-демон, предназначенная для выполнения заданий в определённое время или через определенные промежутки времени. Список заданий, которые будут выполняться автоматически в указанные моменты времени, содержится в файле /etc/crontab (и файлах /var/spool/cron). Посмотрим содержимое /etc/crontab: root@vlamp:~# cat /etc/crontab # /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts –report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.monthly ) Минуты могут принимать значение от 0 до 59, часы от 0 до 23, дни месяца от 1 до 31, месяц от 1 до 12, дни недели от 0 (воскресенье) до 6 (суббота). Дальше указываем пользователя (если делаем через утилиту crontab, это не нужно) и саму команду. Обратите внимание на SHELL и PATH. Не все будет работать так же, как в консоли или скрипте. Кроме числовых значений, доступны и другие знаки. Например, *, определяет все допустимые значения. Если все звездочки — это означает, что скрипт будет запускаться каждую минуту, каждый день. Через запятую (',') можно указать несколько значений: 1,3,4,7,8. Тире ('—') определяет диапазон значений, например: 1-6, что эквивалентно 1,2,3,4,5,6. Звездочка ('*') определяет все допустимые значения поля. Например, звездочка в поле «Часы» будет эквивалентна значению «каждый час». Слэш ('/') может использоваться для пропуска данного числа значений. Например, */3 в поле «Часы» эквивалентно строке 0,3,6,9,12,15,18,21; * означает «каждый час», но /3 диктует использовать только первое, четвертое, седьмое и так далее, значение, определенное *. Например, каждые полчаса можно задать как */30. Минимальное время — одна минута. Cron каждую минуту просматривает список заданий и ищет те, которые нужно выполнить. Если требуется совершить действие с интервалом менее одной минуты, можно пойти на хитрость, использовать в команде sleep: Дни недели и месяца в трехбуквенном варианте: Дополнительные переменные cron Теперь мы можем поставить скрипт бэкапирования в крон: Отдельно стоит сказать о выводе команд. По дефолту крон отправляет вывод скрипта на почту пользователю, который его запустил. Для любого локального пользователя можно настроить внешний ящик, куда будет отправляться предназначенная ему почта. Эти ящики можно вписать в конфиг /etc/aliases (после его редактирования нужно запустить команду newaliases, подробнее настройку рассмотрим на последнем занятии). Это поведение можно изменить, используя директиву MAILTO. Укажем имя пользователя, которому будет послано сообщение о выполнении задания: Вместо имени также можно использовать электронный адрес: Пример: # как обычно, с символа '#' начинаются комментарии # в качестве командного интерпретатора использовать /bin/sh SHELL=/bin/sh # результаты работы отправлять по этому адресу MAILTO=paul@example.org # добавить в PATH домашний каталог пользователя PATH=/bin:/usr/bin:/home/paul/bin #### Здесь начинаются задания, # выполнять каждый день в 0 часов 5 минут, результат складывать в log/daily 5 0 * * * $HOME/bin/daily.job » $HOME/log/daily 2>&1 # выполнять 1 числа каждого месяца в 14 часов 15 минут 15 14 1 * * $HOME/bin/monthly # каждый рабочий день в 22:00 0 22 * * 1-5 echo «Пора домой» | mail -s «Уже 22:00» john 23 */2 * * * echo «Выполняется в 0:23, 2:23, 4:23 и т. д.» 5 4 * * sun echo «Выполняется в 4:05 в воскресенье» 0 0 1 1 * echo «С новым годом!» 15 10,13 * * 1,4 echo «Эта надпись выводится в понедельник и четверг в 10:15 и 13:15» 0-59 * * * * echo «Выполняется ежеминутно» 0-59/2 * * * * echo «Выполняется по четным минутам» 1-59/2 * * * * echo «Выполняется по нечетным минутам» # каждые 5 минут */5 * * * * echo «Прошло пять минут» # каждое первое воскресенье каждого месяца. -eq 7 — код дня недели, т.е. 1 → понедельник , 2 → вторник и т.д.0 1 1-7 * * [ «$(date '+\%u')» -eq 7 ] && echo «Эта надпись выводится каждое первое воскресенье каждого месяца в 1:00» Утилита crontab Утилита позволяет править файл заданий, вызывая указанный по умолчанию редактор (vi, mcedit, nano. Как и visudo, правится не /etc/crontab, а пользовательские файлы в /var/spool/cron). Добавление файла расписания: Вывести содержимое текущего файла расписания: Удаление текущего файла расписания: Редактирование текущего файла расписания (при первом запуске будет выведен список поддерживаемых текстовых редакторов): Этот ключ позволяет выполнять вышеописанные действия для конкретного пользователя: